/*
 * Codificacion.h
 *
 *  Created on: 26/11/2011
 *      Author: putaro
 */
#include "GeneradorPunteros.h"
#include "PunterosHandler.h"
#ifndef CODIFICACION_H_
#define CODIFICACION_H_

/*
 * Es una clase utilitaria que contiene las primitivas para codificar y decodificar números códificas
 * en Unario, Delta y Gamma, los cuales se guardan en archivos. Para acceder a estos archivos se
 * utilizan instancias de las clases GeneradorPunteros y PunterosHandler.
 */
class Codificacion {
public:

/*
 * Pre: El parámetro número es el valor que se quiere codificar como código Delta y el
 * parámetro generador es la instancia de la clase GeneradorPunteros la cual permite
 * escribir en un archivo el resultado de la codificación.
 * Post: Se ha guardado en el archivo asocido al parámetro generador el resultado de la
 * codificación
*/
static void codificarDelta(const unsigned int numero, GeneradorPunteros &generador);

/*
 * Pre: El parámetro punterosHandler es la instancia de la clase PunterosHandler la cual permite
 * leer los números codificados en código Delta en un archivo.
 * Post: Se ha retornado el resultado de la decodificación
 */
static unsigned int decodificarDelta(PunterosHandler &punterosHandler);

/*
 * Pre: El parámetro número es el valor que se quiere codificar como código Gamma y el
 * parámetro generador es la instancia de la clase GeneradorPunteros la cual permite
 * escribir en un archivo el resultado de la codificación.
 * Post: Se ha guardado en el archivo asocido al parámetro generador el resultado de la
 * codificación
 */
static void codificarGamma(const unsigned int numero, GeneradorPunteros &generador);

/*
 * Pre: El parámetro punterosHandler es la instancia de la clase PunterosHandler la cual permite
 * leer los números codificados en código Gamma en un archivo.
 * Post: Se ha retornado el resultado de la decodificación
*/
static unsigned int decodificarGamma(PunterosHandler &punterosHandler);

/*
 * Pre: El parámetro número es el valor que se quiere codificar como código Unario y el
 * parámetro generador es la instancia de la clase GeneradorPunteros la cual permite
 * escribir en un archivo el resultado de la codificación.
 * Post: Se ha guardado en el archivo asocido al parámetro generador el resultado de la
 * codificación
*/
static void codificarUnario(const unsigned int numero , GeneradorPunteros &generador);

/*
 * Pre: El parámetro punterosHandler es la instancia de la clase PunterosHandler la cual permite
 * leer los números codificados en código Unario en un archivo.
 * Post: Se ha retornado el resultado de la decodificación
*/
static unsigned int decodificarUnario(PunterosHandler &punterosHandler);

private:

	Codificacion();
	virtual ~Codificacion();
};

#endif /* CODIFICACION_H_ */
